package com.indeep.user.mapper.po;

import com.baomidou.mybatisplus.annotation.*;
import com.indeep.user.dto.PrivacyDTO;
import com.indeep.user.dto.UpdatePrivacySettingDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * @author Laixin
 * @description app_user_setting
 * @date 2023-08-29
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("app_user_setting")
public class AppUserSettingPO implements Serializable {

    private static final long serialVersionUID = 438934850261373591L;

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户id
     */
    private Long userId;

    /**
     * 通知显示消息详情
     * 0——不开启
     * 1——开启
     */
    private Integer inform;

    /**
     * 声音
     * 0——不开启
     * 1——开启
     */
    private Integer voice;

    /**
     * 振动 0——不开启 1——开启
     */
    private Integer vibration;

    /**
     * 帖子可见时间
     * 0——不限
     * 1——6个月
     * 2——3天
     * 3——3年
     * 4——90天
     * 5——30天
     * 6——7天
     * 7——1年
     */
    private Integer postVisibilityTime;

    /**
     * 评论权限 0——所有人 1——我关注的 2——关注我的 3——互相关注 4——关闭评论
     */
    private Integer commentPermission;

    /**
     * 私信权限 0——所有人 1——我关注的 2——关注我的 3——互相关注 4——关闭私信
     * 关注我的跟没设置有什么区别
     */
    private Integer privateMessagePermissions;

    /**
     * 是否展示空间状态0——否1——是
     */
    private Integer zoneStatusDisplay;

    /**
     * 展示关注列表0——不展示1——展示
     */
    private Integer followDisplay;

    /**
     * 展示粉丝列表0——不展示1——展示
     */
    private Integer fansDisplay;

    /**
     * 展示个性化推荐 0——不展示1——展示
     */
    private Integer individuation;
    /**
     * 展示赞过 0——不展示1——展示
     */
    private Integer likeDisplay;
    /**
     * 展示被赞过 0——不展示1——展示
     */
    private Integer beLikeDisplay;

    /**
     * 最后一次查看好友帖子的时间
     */
    private Date lastViewTime;

    /**
     * 是否禁止发帖 0——不禁止 1——禁止
     */
    private Integer postBan;

    /**
     * 是否禁止评论 0——不禁止 1——禁止
     */
    private Integer commentBan;

    /**
     * 是否禁止私信 0——不禁止 1——禁止
     */
    private Integer privateLetterBan;

    /**
     * 信用值（影响经验）
     */
    private Integer credit;

    /**
     * 发帖评论时间
     */
    private Timestamp speakLimitTime;

    /**
     * 创建时间-创建时自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新时间-创建与修改时自动填充
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    public AppUserSettingPO(UpdatePrivacySettingDTO dto, Long userId) {
        this.userId = userId;
        if (dto.getPostTime() != null) this.postVisibilityTime = dto.getPostTime();
        if (dto.getCommentSet() != null) this.commentPermission = dto.getCommentSet();
        if (dto.getPrivateMessageSet() != null) this.privateMessagePermissions = dto.getPrivateMessageSet();
    }

    public AppUserSettingPO(Long userId){
        this.userId = userId;
        this.inform = 1;
        this.voice = 1;
        this.vibration = 1;
        this.postVisibilityTime = 0;
        this.commentPermission = 0;
        this.zoneStatusDisplay = 1;
        this.followDisplay = 1;
        this.fansDisplay = 1;
        this.individuation = 0;
        this.likeDisplay = 1;
        this.beLikeDisplay = 1;
        this.postBan = 0;
        this.commentBan = 0;
        this.privateLetterBan = 0;
        LocalDateTime currentTime = LocalDateTime.now();
        this.speakLimitTime = Timestamp.valueOf(currentTime);
    }

    public AppUserSettingPO(PrivacyDTO dto, Long userId) {
        this.userId = userId;
        if (dto.getInform() != null) this.inform = dto.getInform();
        if (dto.getShake() != null) this.vibration = dto.getShake();
        if (dto.getVoice() != null) this.voice = dto.getVoice();
    }
}